

package tpcar.ejb;


import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;


/**
 * a card.
 */

@Entity
@IdClass(CleComposite.class)
@NamedQueries({@NamedQuery(name="allPersonnes", query="select o FROM Personne o"),
               @NamedQuery(name="findPersonByName", query="select o FROM Personne o WHERE o.nom = :nom")
              }
             )


public class Personne implements java.io.Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1981959009624228041L;

	/**
	 * FirstName & primary key.
	 */
	@Id
	@Column(name="nompersonne")
	private String nom = null;

	/**
	 * LastName.
	 */
	@Id
	@Column(name="prenompersonne")
	private String prenom = null;

	/**
	 * birth date.
	 */
	private String dateNaissance = null;

	/**
	 * birth place.
	 */
	private String lieuNaissance = null;

	/**
	 * sexe
	 */
	private String sexe = null;


/**
 * recuperation immediate des entites associees (FetchType.EAGER)
 * rEcuperation retardee (FetchType.LAZY) 
 */
	@OneToMany(mappedBy = "personne", fetch = FetchType.EAGER)
	private Collection<CarteDeVisite> carte;


	/**
	 * Default constructor.
	 */
	public Personne() {

	}

	/**
	 * @param nom
	 * @param prenom
	 * @param dateNaissance
	 * @param lieuNaissance
	 * @param sexe
	 */
	public Personne(String nom, String prenom, String dateNaissance,
			String lieuNaissance, String sexe) {
		this.nom = nom;
		this.prenom = prenom;
		this.dateNaissance = dateNaissance;
		this.lieuNaissance = lieuNaissance;
		this.sexe = sexe;
		this.carte = new ArrayList<CarteDeVisite>();
	}


	public Personne(String n) {
		this.nom = n;
	}

	/**
	 * @return the nom
	 */
	public String getNom() {
		return nom;
	}



	/**
	 * @param nom the nom to set
	 */
	public void setNom(String nom) {
		this.nom = nom;
	}



	/**
	 * @return the prenom
	 */
	public String getPrenom() {
		return prenom;
	}



	/**
	 * @param prenom the prenom to set
	 */
	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}



	/**
	 * @return the dateNaissance
	 */
	public String getDateNaissance() {
		return dateNaissance;
	}


	/**
	 * @param dateNaissance the dateNaissance to set
	 */
	public void setDateNaissance(String dateNaissance) {
		this.dateNaissance = dateNaissance;
	}


	/**
	 * @return the lieuNaissance
	 */
	public String getLieuNaissance() {
		return lieuNaissance;
	}



	/**
	 * @param lieuNaissance the lieuNaissance to set
	 */
	public void setLieuNaissance(String lieuNaissance) {
		this.lieuNaissance = lieuNaissance;
	}



	/**
	 * @return the sexe
	 */
	public String getSexe() {
		return sexe;
	}



	/**
	 * @param sexe the sexe to set
	 */
	public void setSexe(String sexe) {
		this.sexe = sexe;
	}


	public Collection <CarteDeVisite> getCarteDeVisite()
	{
		return carte;
	}

	public void setCarteDeVisite(Collection<CarteDeVisite> carte)
	{
		this.carte=carte;
	}

	public void addCarteDeVisite(CarteDeVisite carte)
	{
		this.carte.add(carte);
	}

	public void removeCarteDeVisite(CarteDeVisite carte)
	{
		this.carte.remove(carte);
	}

	/**
	 * @return String representation of this entity object.
	 */
	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder(this.getClass().getName());
		sb.append(", nom=");
		sb.append(getNom());
		sb.append(", prenom=");
		sb.append(getPrenom());  
		sb.append(", Date de naissance=");
		sb.append(getDateNaissance()); 
		sb.append(", Lieu de naissance=");
		sb.append(getLieuNaissance());     
		sb.append("]");
		return sb.toString();
	}
}
